昨天先完成了 Speech-to-Text,讓 AI 可以把使用者說的話轉成文字。
今天要做的事情剛好相反:
Text
↓
TTS
↓
Audio
↓
Playback
讓 AI 不只能「聽懂」,也能真正開口說話。
如果要做一個高齡智慧健康陪伴系統,只透過文字回覆其實不太夠。
對部分高齡使用者來說,直接用語音互動會比一直閱讀螢幕上的文字更直覺。未來不論是日常陪伴、衛教內容,甚至提醒,都需要透過聲音自然傳達。
完整流程會逐漸變成:
使用者說話
↓
STT
↓
LLM
↓
TTS
↓
AI 說話
今天還沒有接上 LLM,所以先從 Terminal 手動輸入文字。
一開始我測試過 Qwen3-TTS 1.7B。
在目前這台 Mac 與測試設定下,Warm RTF 約為:
3.03
也就是生成 1 秒語音大約需要 3 秒,對即時對話來說還是偏慢。
因此這次改測:
mlx-community/Kokoro-82M-bf16
Kokoro 只有 82M,可以透過 MLX 在 Apple Silicon GPU 上本機執行,而且不需要額外提供參考音訊。
目前使用:
zf_xiaoxiao
作為預設中文聲線。
執行:
.venv-kokoro/bin/python -m app.tts.kokoro_cli \
--text "你好,今天過得怎麼樣?"
流程:
輸入文字
↓
Kokoro 82M
↓
產生 WAV
↓
自動播放
也可以調整語速:
.venv-kokoro/bin/python -m app.tts.kokoro_cli \
--text "今天有記得吃飯嗎?" \
--voice zf_xiaoxiao \
--speed 0.9
這次使用 RTF(Real-Time Factor)量測生成速度:
RTF = Inference Time / Audio Duration
RTF 小於 1,代表模型生成語音的速度比實際播放速度還快。
| 測試 | 推論時間 | 音訊長度 | RTF |
|---|---|---|---|
| 短句 | 0.095 s | 2.30 s | 0.041 |
| 一般句 | 0.113 s | 2.85 s | 0.040 |
| 中句 | 0.227 s | 5.35 s | 0.043 |
| 長句 | 0.437 s | 9.10 s | 0.048 |
平均:
RTF = 0.0464
模型載入時間約為:
0.286 秒
目前即使還沒有使用 Streaming TTS,整段語音生成完成後再播放,等待時間也已經很短。
除了速度,也測試了一般中文、數字、長句、標點與不同語速。
生成結果再透過 MLX Whisper 回聽,純中文測試得到:
CER = 0
這代表這批測試句在語音內容的可辨識度上沒有出現錯字。
另外測試:
speed = 0.9
speed = 1.0
speed = 1.1
三種速度都能正常生成。
如果未來主要提供給高齡使用者,我目前比較傾向:
speed = 0.9
讓語速稍微慢一些。
目前比較明顯的問題是中英文混合時,部分英文詞的發音仍然不夠穩定,之後可能需要在送進 TTS 前加入文字正規化。
Day 03 完成:
Text
↓
Kokoro 82M
↓
Audio
↓
Playback
目前一般聊天會先使用 Kokoro,優先追求低延遲。
而需要特定家人聲線的情境,則會另外使用 Voice Cloning。
下一步要測試:
只提供一小段真人錄音,AI 能不能用相似的聲音說出新的內容?
Day 04 準備進入 Voice Cloning。